<?php

defined('EN_CODE') or die(__FILE__.': Direct Access Denied');

use Code\Model;
use Code\Paginador;


function listado_total_productos() {
    $model = Model::getInstance();
    $query = "SELECT p.*, m.nombre AS marca, t.nombre AS tipo
              FROM productos p
                INNER JOIN marcas m USING(id_marca)
                INNER JOIN tipos t USING(id_tipo)
              WHERE estado=1 ORDER BY m.nombre, p.nombre";
    $result = $model->query($query);
    if (!$result) {
        return null;
    }
    return $model->fetchAll($result);
}

function listado_total_productos_con_stock() {
    $model = Model::getInstance();
    $query = "SELECT p.*, m.nombre AS marca, t.nombre AS tipo
              FROM productos p
                INNER JOIN marcas m USING(id_marca)
                INNER JOIN tipos t USING(id_tipo)
              WHERE p.estado=1 AND p.stock>0
              ORDER BY m.nombre, p.nombre";
    $result = $model->query($query);
    if (!$result || $model->numRows($result)<=0) {
        return null;
    }
    return $model->fetchAll($result);
}

function listado_productos(Paginador $paginador, $pagina=1) {
    $model = Model::getInstance();
    $query = "SELECT * FROM productos WHERE estado=1";
    $query = $paginador->query($model, $query, $pagina);
    $result = $model->query($query);
    if (!$result) {
        return null;
    }
    return $model->fetchAll($result);
}

function un_producto($id_producto) {
    $model = Model::getInstance();
    $id_producto_escaped = preg_replace('/[^\d]/', '', $id_producto);
    $query = "SELECT p.*, t.nombre AS tipo_nombre, m.nombre AS marca_nombre
              FROM productos p INNER JOIN tipos t USING(id_tipo) INNER JOIN marcas m USING(id_marca)
              WHERE id_producto=$id_producto_escaped";
    $result = $model->query($query);
    return $model->fetchOne($result);
}

function un_producto_con(array $parameters) {
    $model = Model::getInstance();
    $i = 0;
    $conditions = "";
    foreach ($parameters as $field => $value) {
        if ($i!=0) {
            $conditions .= " OR ";
        } else {
            $i++;
        }
        $conditions .= " $field='$value' ";
    }
    $query = "SELECT * FROM productos WHERE estado=1 AND ($conditions)";
    $result = $model->query($query);
    return $model->fetchOne($result);
}

function productos_de_venta($id_venta) {
    $model = Model::getInstance();
    $id_venta_escaped = preg_replace('/[^\d]/', '', $id_venta);
    $query = "SELECT vp.*, p.*, m.nombre AS marca, t.nombre AS tipo
              FROM venta_producto vp
                INNER JOIN productos p USING(id_producto)
                INNER JOIN marcas m USING(id_marca)
                INNER JOIN tipos t USING(id_tipo)
              WHERE numero_venta=$id_venta_escaped";
    $result = $model->query($query);
    return $model->fetchAll($result);
}

function hay_producto_con_id($id_producto) {
    $model = Model::getInstance();
    $id_producto_escaped = preg_replace('/[^\d]/', '', $id_producto);
    $query = "SELECT * FROM productos WHERE id_producto=$id_producto_escaped";
    $result = $model->query($query);
    return ($model->numRows($result)>=1);
}

function crear_producto(array $parameters) {
    $model = Model::getInstance();
    $campos = "INSERT INTO productos (";
    $valores = " VALUES(";
    $cantidad_campos = count($parameters);
    $cantidad_campos_procesados = 0;
    foreach ($parameters as $campo => $valor) {
        $campos .= $campo;
        if (++$cantidad_campos_procesados!=$cantidad_campos) {
            $campos .= ', ';
        } else {
            $campos .= ')';
        }
        $valores .= "'$valor'";
        if ($cantidad_campos_procesados!=$cantidad_campos) {
            $valores .= ', ';
        } else {
            $valores .= ')';
        }
    }
    $query = $campos.$valores;
    return $model->query($query);
}

function estado_producto($id_producto, $estado) {
    $model = Model::getInstance();
    $id_producto_escaped = preg_replace('/[^\d]/', '', $id_producto);
    $estado_escaped = preg_replace('/[^\d]/', '', $estado);
    $query = "UPDATE productos SET estado=$estado_escaped WHERE id_producto=$id_producto_escaped";
    return $model->query($query);
}

function monto_total(array $productos) {
    $model = Model::getInstance();
    $monto = 0;
    foreach ($productos as $id_producto => $cantidad) {
        $producto = un_producto($id_producto);
        $monto += ($producto['precio']*$cantidad);
    }
    return $monto;
}

function descontar_stock(array $productos) {
    $model = Model::getInstance();
    foreach ($productos as $id_producto => $cantidad) {
        $producto = un_producto($id_producto);
        $query = "UPDATE productos SET stock=". ($producto['stock']-$cantidad) ." WHERE id_producto=$id_producto";
        $model->query($query);
    }
}

function aumentar_stock(array $productos) {
    $model = Model::getInstance();
    foreach ($productos as $prod) {
        $producto = un_producto($prod['id_producto']);
        $query = "UPDATE productos SET stock=". ($producto['stock']+$prod['cantidad']) ." WHERE id_producto=$prod[id_producto]";
        $model->query($query);
    }
}
/*
function productos_de_venta($numero_venta) {
    $model = Model::getInstance();
    $query = "SELECT * FROM venta_producto WHERE numero_venta=$numero_venta";
    $result = $model->query($query);
    return $model->fetchAll($result);
}*/

?>
